package main

import (
	"fmt"
	"time"
)

//func main() {
//	c := make(chan int, 3)
//	//内置函数 len 返回未被读取的缓冲元素数量，cap 返回缓冲区大小
//	fmt.Printf("len(c)=%d, cap(c)=%d\n", len(c), cap(c))
//
//	go func() {
//		defer fmt.Println("子go程结束")
//		for i := 0; i < 4; i++ {
//			c <- i
//			fmt.Printf("子go程正在运行[%d]: len(c)=%d, cap(c)=%d\n", i, len(c), cap(c))
//		}
//	}()
//	time.Sleep(2 * time.Second)
//	for i := 0; i < 4; i++ {
//		num := <-c
//		fmt.Println("num:", num)
//	}
//	fmt.Println("main goroutine结束")
//}

func main() {
	c := make(chan int, 3)
	//内置函数 len 返回未被读取的缓冲元素数量，cap 返回缓冲区大小
	fmt.Printf("len(c)=%d, cap(c)=%d\n", len(c), cap(c))

	go func() {
		defer fmt.Println("子go程结束")
		for i := 0; i < 4; i++ {
			c <- i
			fmt.Printf("子go程正在运行[%d]: len(c)=%d, cap(c)=%d\n", i, len(c), cap(c))
		}
	}()
	time.Sleep(2 * time.Second)
	for i := 0; i < 4; i++ {
		num := <-c
		fmt.Println("num:", num)
	}

	time.Sleep(1 * time.Second)
	fmt.Println("main goroutine结束")
}
